package com.zjsru.plan2024.oneday;

/**
 * @Author: cookLee
 * @Date: 2024-01-22
 * 最大交换
 */
public class MaximumSwap {

    /**
     * 主
     * \
     * 输入: 2736
     * 输出: 7236
     * 解释: 交换数字2和数字7。
     * \
     * 输入: 9973
     * 输出: 9973
     * 解释: 不需要交换。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        MaximumSwap maximumSwap = new MaximumSwap();
        int num = 98368;
        System.out.println(maximumSwap.maximumSwap(num));
    }

    /**
     * 最大交换量：遍历
     *
     * @param num num
     * @return int
     */
    public int maximumSwap(int num) {
        int ans = num;
        char[] chars = String.valueOf(num).toCharArray();
        int len = chars.length;
        for (int i = 0; i < len; i++) {
            for (int j = i + 1; j < len; j++) {
                int swapNum = this.helper(i, j, chars);
                ans = Math.max(swapNum, ans);
            }
        }
        return ans;
    }

    /**
     * 交换助手类
     *
     * @param i     我
     * @param j     j
     * @param chars 字符
     * @return int
     */
    private int helper(int i, int j, char[] chars) {
        //由于chars数组是通过引用传递的，所以在helper方法内部进行的更改直接影响了传递给它的原始数组。因此复制chars数组
        char[] clone = chars.clone();
        char temp = clone[i];
        clone[i] = clone[j];
        clone[j] = temp;
        return Integer.parseInt(String.valueOf(clone));
    }

}
